package com.xgp.unsafe;

import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.stream.Collectors;

/**
 * ArrayList集合不安全
 * java.util.ConcurrentModificationException  并发修改异常
 * 解决方案：
 *          1、Vector<> 来解决
 *          2、 通过工具类来变安全  List<String> list = Collections.synchronizedList(new ArrayList<>());
 *          3、new CopyOnWriteArrayList<>();
 */
public class ListTest {
    public static void main(String[] args) {
/*        List<String> list = Arrays.asList("1", "2", "3");

        list.forEach(System.out::println);*/

        /**
         * CopyOnWrite 写入时复制  COW计算机程序设计领域的一种优化策略
         * 多个线程调用时，List,读取的时候固定，写入时先复制一份，写完后再拆入进去
         * 优点：比Vector速度更快
         */
        List<String> list = new CopyOnWriteArrayList<>();
        for(int i = 0;i < 10;i++) {
            new Thread(() -> {
                list.add(UUID.randomUUID().toString().substring(0,5));

                System.out.println(list);
            },String.valueOf(i)).start();

        }
    }
}
